//package com.itheima.reggie.utils;
//
//import com.itheima.reggie.common.UserIdHolder;
//import com.itheima.reggie.entity.Fu;
//import lombok.extern.slf4j.Slf4j;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Pointcut;
//import org.springframework.stereotype.Component;
//
//import java.time.LocalDateTime;
//
////@Aspect
////@Component
//@Slf4j
//public class CommomFieldAdvice { // 通知类
//
//    // 切点表达式(对哪些控制器方法进行增强)
//    @Pointcut("execution(* com.itheima.reggie.controller.*Controller.update(..))" +
//            " || " +
//            " execution(* com.itheima.reggie.controller.*Controller.save(..))")
//    public void pt() {
//    }
//
//    // @Around("execution(* com.itheima.reggie.controller.*.update(..))")
//    @Around("pt()") //切面
//    public Object setCommomField(ProceedingJoinPoint pjp) {
//        log.info("aop 执行了");
//        Object result = null;
//        Fu obj = null;
//        try {
//            //从控制器方法参数中 获取实体类对象
//            Object[] args = pjp.getArgs();
//            for (Object arg : args) {
//                if (arg instanceof Fu) {
//                    obj = (Fu) arg;
//                    break;
//                }
//            }
//            //实体类中有些并没有继承 Fu ,因此不会走 if代码块中的增强逻辑
//            if (obj != null) {
//                String methodName = pjp.getSignature().getName();
//                Long userId = UserIdHolder.get();
//                log.info("UserIdHolder.get() -->" + userId);
//                if (methodName.startsWith("save")) {
//                    obj.setCreateTime(LocalDateTime.now());
//                    obj.setCreateUser(userId);
//                }
//                obj.setUpdateTime(LocalDateTime.now());
//                obj.setUpdateUser(userId);
//            }
//            result = pjp.proceed(args);
//        } catch (Throwable e) {
//            throw new RuntimeException(e.getMessage());
//        }
//        return result;
//    }
//}
